package org.example.backend.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.example.backend.common.PageResult;
import org.example.backend.common.Result;
import org.example.backend.dto.PageRequestDTO;
import org.example.backend.entity.User;
import org.example.backend.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * 用户控制器
 */
@RestController
@RequestMapping("/user")
@Api(tags = "用户接口")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 分页查询用户
     *
     * @param pageRequest 分页参数
     * @return 分页结果
     */
    @PostMapping("/page")
    @ApiOperation("分页查询用户")
    public Result<PageResult<User>> page(@Valid @RequestBody PageRequestDTO pageRequest) {
        Page<User> page = new Page<>(pageRequest.getCurrent(), pageRequest.getSize());
        page = userService.pageUser(page, pageRequest.getKeyword());
        return Result.success(PageResult.build(page.getTotal(), page.getSize(), page.getCurrent(), page.getRecords()));
    }

    /**
     * 获取用户信息
     *
     * @param id 用户ID
     * @return 用户信息
     */
    @GetMapping("/{id}")
    @ApiOperation("获取用户信息")
    public Result<User> getById(@PathVariable Long id) {
        return Result.success(userService.getById(id));
    }

    /**
     * 更新用户信息
     *
     * @param user 用户信息
     * @return 更新结果
     */
    @PutMapping
    @ApiOperation("更新用户信息")
    public Result<?> update(@Valid @RequestBody User user) {
        // 不允许修改密码
        user.setPassword(null);
        userService.updateById(user);
        return Result.success();
    }

    /**
     * 删除用户
     *
     * @param id 用户ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    @ApiOperation("删除用户")
    public Result<?> delete(@PathVariable Long id) {
        userService.removeById(id);
        return Result.success();
    }

    /**
     * 启用用户
     *
     * @param id 用户ID
     * @return 启用结果
     */
    @PutMapping("/enable/{id}")
    @ApiOperation("启用用户")
    public Result<?> enable(@PathVariable Long id) {
        User user = new User();
        user.setId(id);
        user.setStatus(1);
        userService.updateById(user);
        return Result.success();
    }

    /**
     * 禁用用户
     *
     * @param id 用户ID
     * @return 禁用结果
     */
    @PutMapping("/disable/{id}")
    @ApiOperation("禁用用户")
    public Result<?> disable(@PathVariable Long id) {
        User user = new User();
        user.setId(id);
        user.setStatus(0);
        userService.updateById(user);
        return Result.success();
    }
} 